package 系统复习.栈和队列;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/**
 * 给出由小写字母组成的字符串 S，重复项删除操作会选择两个相邻且相同的字母，并删除它们。
 * 在 S 上反复执行重复项删除操作，直到无法继续删除。
 * 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
 */

public class L1047 {

    public static String removeDuplicates(String s) {

        Stack<Character> stack = new Stack<>();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (!stack.isEmpty() && stack.peek() == chars[i]) {
                stack.pop();
            } else {
                stack.push(chars[i]);
            }
        }

        List<Character> list = new ArrayList<>();
        while (!stack.empty()) {
            list.add(stack.pop());
        }

        StringBuffer sb = new StringBuffer();
        for (int i = list.size() - 1; i >= 0; i--) {
            sb.append(list.get(i));
        }
        return sb.toString();

    }

    public static void main(String[] args) {
        System.out.println(removeDuplicates("abbaca"));
    }

}
